<template>
  <ul class="todo-list">
    <!-- completed: 完成的类名 -->
    <!-- 动态绑定class的css属性 把他变成一个对象 类名conpleted的值就是isDone的值 true就是显示 false就是不显示  -->
    <li :class="{ completed: item.isDone }" v-for="item in list" :key="item.id">
      <!--                  ↑遍历我们传进来的数组 -->

      <div class="view">
        <!-- 双向绑定isDone  实时更新 如果是true    ↓那么复选框的值也是true 反之就是false -->
        <!-- <input class="toggle" type="checkbox" v-model="item.isDone" /> -->
        <!--  -->
        <!--                                                               ↓ @change事件 就是当我checkbox的值改变的时候 会触发一个函数 -->
        <!--                    现在item.isDone是一个死值 需要我们点击后修改它                 ↓ 传出一个实参-->
        <input class="toggle" type="checkbox" :checked="item.isDone" @change="changeFn(item.id)" />
        <label>{{ item.name }}</label>
        <!-- 添加一个点击事件 -->
        <button class="destroy" @click="delFn(item.id)"></button>
      </div>
    </li>
  </ul>
</template>

<script>
export default {
  props: {
    list: {
      type: Array, //检查是否上传数组
      required: true, //必传
    },
  },
  // 因为要传值 所以点击事件要获取一个参数
  methods: {//储存函数的地方
    delFn(id) {
      console.log(id)
      // $emit触发并且向父组件一个叫del的事件发送
      this.$emit('del', id)
    },
    // 获取事件对象
    // changeFn(e){
    //   console.log('我改变了',e.target.checked);
    // }
    changeFn(id) {
      // console.log(id);
      this.$emit('change',id)
      // change事件  当我点击input框的时候   子组件checkbox值发生了改变  然后就触发了change事件 触发后在触发一个函数 传出一个实参实参就是点击的这一项的id
      // 然后用$emit通知父组件change  发送一个实参 父组件里需要有一个自定义函数 名字是change 会触发一个方法
      // changeFn会触发一个函数  并且执行代码
      // find数组 遍历数组寻找并且返回一个id值等于传过来id的对象  把这个对象的isDone属性取反
      // 然后上面动态绑定的completed属性也会变化 就导致了css样式的来回切换
    }
  },
}
</script>
